package service

import (
	"context"
	"devops-super/api"
	v1 "devops-super/api/configs/v1"
	"devops-super/internal/model/entity"
)

// IProductConfig 产品配置服务接口
type IProductConfig interface {
	// GetPageLst 分页获取产品配置列表
	GetPageLst(ctx context.Context, in *v1.ProductConfigGetPageLstReq) (out *api.PageLstRes[*entity.AppProductConfig], err error)
	// Add 新增产品配置
	Add(ctx context.Context, in *entity.AppProductConfig) (err error)
	// Upt 更新产品配置
	Upt(ctx context.Context, in *entity.AppProductConfig) (err error)
	// Del 删除产品配置
	Del(ctx context.Context, id int64) (err error)
	// GetOne 获取单条产品配置
	GetOne(ctx context.Context, id int64) (out *entity.AppProductConfig, err error)
	// GetOptions 获取产品配置选项
	GetOptions(ctx context.Context, in *v1.ProductConfigGetOptionsReq) (out *v1.ProductConfigGetOptionsRes, err error)
	// GetGroupConfigs 获取配置组
	GetGroupConfigs(ctx context.Context, in *v1.GetProductGroupConfigsReq) (out *v1.GetProductGroupConfigsRes, err error)
	// SetGroupConfigs 保存配置组
	SetGroupConfigs(ctx context.Context, in *v1.SetProductGroupConfigsReq) (err error)

	GetConfigByKey(ctx context.Context, productId int64, groupName, configKey string) (configValue string, err error)
}

var (
	localProductConfig IProductConfig
)

// ProductConfig 获取产品配置服务实例
func ProductConfig() IProductConfig {
	if localProductConfig == nil {
		panic("implement not found for interface IProductConfig, forgot register?")
	}
	return localProductConfig
}

// RegisterProductConfig 注册产品配置服务实例
func RegisterProductConfig(i IProductConfig) {
	localProductConfig = i
}
